草庐IT

Python Django 模板 : Iterate Through List

全部标签

c++ - 自动转换模板<T>到模板<const T>

下面的这段应该主要用于T={char,constchar}的字符串View是主要的预期模板实例化目标。cmp函数应该类似于strcmp来比较View。.问题是虽然char*愉快地转换为constchar*我不知道如何获得SVec转换为SVec一样开心。最后一行(cout)无法编译。我必须明确地进行转换(cmp(SVec(rv),rvc))。它可以像char*一样自动吗?至constchar*?代码(大大简化):templateclassSVec{protected:T*begin_;size_tsize_;public:SVec(T*begin,size_tsize):begin_(b

c++ - 如果嵌套类型(未访问)带有无法编译的方法,是否可以实例化模板?

无意中发现g++(5.2.0)编译如下templatestructA{intx;structB{voidfoo(){x=1;}};};甚至统计A和A::B,提供成员(member)B::foo未使用。您合理地得到了x的编译错误作为A的非静态成员即使只是编译空操作语句&A::B::foo;.clang(3.6.2)然而拒绝模板,即使A根本没有实例化,因为它说非静态成员名称x不能在B内使用而只是阅读模板定义。这是g++中的错误还是clang对未实例化的模板成员过于严格? 最佳答案 x在您的代码中是一个非依赖名称,并且标准呈现一个无法有效

c++ - 模板类中的比较器

我正在研究堆实现。它必须是模板类,我需要它有自己的比较器,传入构造函数。我该怎么做?我已经试过了:templateclassHeap{public:Heap(intsize,bool(*comparator)(constT&a,constT&b)=[](constT&a,constT&b){returna适用于:Heapheap(4);还有:Heapheap(4,[](constint&a,constint&b){returnfalse;})但是当我尝试将它与这样的指针一起使用时(其中offer是某种结构):Heapheap2(3,[](Offerconst*a,Offerconst*

c++ - 使用 libtooling 获取完全限定的模板模板参数名称

我正在尝试使用libtooling打印CXXRecordDecl具有模板模板参数的模板类的实例化。不幸的是,模板模板参数的字符串表示不完全限定(例如,它缺少namespace)。我正在打印CXXRecordDecl使用此代码:clang::PrintingPolicypolicy=compiler_instance->getLangOpts();std::stringname=decl->getTypeForDecl()->getCanonicalTypeInternal().getAsString(policy);这是一个我希望输出为ns::A的示例,但我得到ns::A:namesp

c++ - 类型的模板特化和 const 限定符

为什么编译器期望模板在(具体)类型上单独特化T和constT?让我举个例子。我有一个由类类型键控的无序映射Keystd::unordered_mapdata;要编译它必须专门化std::hash在类型上Key作为namespacestd{templateclasshash{/*implementation*/};}但是,当我将map类型更改为std::unordered_mapdata;编译器没有使用我的特化,而是选择了通用的std::hash,这只不过是一个编译时断言,直到我专门化std::hash.撇开使用const限定映射键类型的实用程序,为什么不constT折叠到T在寻找这种情

c++ - 了解模板代码膨胀

我在阅读ScottMeyersC++时遇到了所谓的代码膨胀概念。他提供了一个如何通过继承减少它的示例:templateclassSquareMatrixBase{protected:voidinvert(std::size_tmatrixSize);//classSquareMatrix:privateSquareMatrixBase{private:usingSquareMatrix::invert;public:voidinvert(){invert(n)}}现在,在项目摘要中他说Templatesgeneratemultipleclassesandmultiplefunction

C++11 对模板参数类型的 vector 使用迭代器

这个问题在这里已经有了答案:WhereandwhydoIhavetoputthe"template"and"typename"keywords?(8个答案)关闭6年前。我有一个模板类,其中包含作为模板参数给出的类型的指针vector。我希望能够使用基于范围的迭代来迭代vector的有限部分。我的类包含以下功能:templateclassObjectList{...public://!Beginiterationoveralistofobjectsstd::vector::iteratorbegin();//!Iteratortoonepasttheendofthelistofobjec

c++ - 具有模板参数的通用 lambda 函数

#include#includetemplatevoidh(T,U){}templatevoidf(std::tuplet,std::tupleu){autog=[&](std::index_sequence){boolconstr[]{((void)h(std::get(t),std::get(u)),false)...};(void)r;};g(std::index_sequence_for());}intmain(){f(std::make_tuple(0L,0LL),std::make_tuple(0UL,0ULL));}以上使用g++test_templated_lambda

c++ - 模板参数中是否禁止使用 SFINAE,还是我遇到了 clang 错误?

以下是我在实际代码中遇到的问题的简化版本。精简版:只看gcc.godbolt.org处的代码和错误/长版:继续阅读;)假设我想要一个带有模板参数setting和方法intfunc(int)的类,例如:当setting为false时,func返回其参数当setting为true时,func将其参数加倍最简单的方法是专门化类模板:templatestructA{intfunc(x)const{return2*x;}};templatestructA{intfunc(x){returnx;}};这种方法的问题是,如果我有一堆不依赖于setting的其他方法,我将不得不在两个特化中复制粘贴它们

c++ - 成员函数作为函数模板的参数

我想注册回调函数,并将它们存储在一个vector中以供调用。还应该允许使用成员函数作为回调函数。我最初的方法是使用通过以下方式:#include#include#includestd::vector>functions;structFoo{voidBar(){std::coutvoidRegister(T*obj,std::functionfunction){functions.push_back(std::bind(function,obj));}voidmain(){Foofoo;Register(&foo,&Foo::Bar);}这不起作用,因为编译器无法推断参数类型。只有当我明